iT邦幫忙

2024 iThome 鐵人賽

DAY 28
0
佛心分享-SideProject30

門外漢的嵌入式地獄系列 第 28

Day 28 。初入嵌入式開發- RS485 驅動開發

  • 分享至 

  • xImage
  •  

同樣的相關設定可以參照前面一篇的RS232,這邊比較需要注意的是 RS485 有三隻腳, D+ D- DIR,DIR 又分為軟硬體,這邊我建議是直接找硬體的腳位來做DIR比較快。

設備樹

同樣是由 pinctrl 這個控制器在控制的,所以我們要先在 pinctrl 定義好分組。

uart9_pins_mx: uart9_mx-0 {
		pins1 {
			pinmux = <STM32_PINMUX('G', 8, AF6)>; /* UART9_TX */
			bias-disable;
			drive-push-pull;
			slew-rate = <0>;
		};
		pins2 {
			pinmux = <STM32_PINMUX('I', 5, AF6)>; /* UART9_RX */
			bias-disable;
			drive-push-pull;
		};
		pins3 {
			pinmux = <STM32_PINMUX('I', 11, AF6)>; /* UART9_DIR */
			bias-disable;
			drive-push-pull;
			slew-rate = <0>;
		};
	};
	
	uart9_idle_pins_mx: uart9_idle_mx-0 {
		pins1 {
			pinmux = <STM32_PINMUX('G', 8, ANALOG)>; /* UART9_TX */
		};
		pins2 {
			pinmux = <STM32_PINMUX('I', 5, AF6)>; /* UART9_RX */
			bias-disable;
			drive-push-pull;
		};
		pins3 {
			pinmux = <STM32_PINMUX('I', 11, AF6)>; /* UART9_DIR */
			bias-disable;
			drive-push-pull;
			slew-rate = <0>;
		};
	};
	
	uart9_sleep_pins_mx: uart9_sleep_mx-0 {
		pins {
			pinmux = <STM32_PINMUX('G', 8, ANALOG)>, /* UART9_TX */
				  <STM32_PINMUX('I', 5, ANALOG)>, /* UART9_RX */
				  <STM32_PINMUX('I', 11, ANALOG)>; /* UART9_DIR */
		};
	};

同樣後面的 AF6 是替代功能,參照spec可以看到相關的說明。

接下來我們要寫 uart9 的功能定義了,在 pinctrl 當中只是在定義腳位分組與功能選用

&uart9 {
	pinctrl-names = "default", "idle", "sleep";
	pinctrl-0 = <&uart9_pins_mx>;
	pinctrl-1 = <&uart9_idle_pins_mx>;
	pinctrl-2 = <&uart9_sleep_pins_mx>;
	status = "okay";

	linux,rs485-enabled-at-boot-time;
	rs485-rts-active-high;
	uart-has-rtscts;
};

驗證

先設定 BaudRate 485 相關設定

stty -F /dev/ttySTM2 115200 cs8 -cstopb -parenb
printf '\xFE' > /dev/ttySTM2
stty -F /dev/ttySTM2 115200

上一篇
Day 27 。初入嵌入式開發- RS232 驅動開發
下一篇
Day 29 。初入嵌入式開發- I2C S35390A RTC驅動開發
系列文
門外漢的嵌入式地獄30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言